In diesem Kapitel schauen wir uns Verzweigungen, Schleifen und Funktionen in PHP an. Wir beginnen mit den Verzweigungen. Hier sehen Sie ein Beispiel für Verzweigungen in PHP mit einer if-then-else-Struktur. Eine Variable „wert“ wird mit dem Wert minus fünf Komma drei definiert. Anschließend wird eine Bedingungsabfrage durchgeführt. Wenn „wert“ kleiner als null ist, wird die Variable „farbe“ auf den Wert rot gesetzt. Ist „wert“ größer als null, wird „farbe“ auf grün gesetzt. Wenn „wert“ gleich null ist, wird „farbe“ auf schwarz gesetzt. Zum Schluss wird der Text „Test“ in der definierten Farbe ausgegeben. Da „wert“ kleiner als null ist, erscheint der Text „Test“ in roter Farbe. Dieses Beispiel zeigt, wie bedingte Anweisungen in PHP verwendet werden können, um unterschiedliche Aktionen basierend auf dem Wert einer Variablen auszuführen. Hier sehen Sie dasselbe Beispiel mit einer else-if Struktur. Ist nur eine Anweisung in dem Block, kann man wie in anderen Sprachen auch die Klammern weglassen. Dann gerät man aber vielleicht in die Problematik des hanging-else. Ähnlich wie Java besitzt auch PHP den Trinitätsoperator: das Fragezeichen. Programmier-Anfänger halten den Fragezeichen-Operator für kryptisch und den erzeugten Quellcode für schlecht lesbar. Profis verwenden gerade diesen Operator jedoch gern, um kompakten Quellcode zu verfassen. Überlegen Sie am besten, wer in Zukunft Einblick in Ihren Quellcode bekommt. Hier also nochmal dasselbe Beispiel. Genauso wie in Java besitzt PHP auch die switch-Verzweigung. Die Breaks sind auch hier Pflicht, um ein fall-through zu verhindern. In diesem Beispiel wird also „gut“ ausgegeben. Default beinhaltet alle anderen Fälle, die oben nicht abgehandelt wurden. Hier ein modifiziertes Beispiel mit einem gewollten fall-through. Kommen wir nun zu den Schleifen in PHP. Die Folie zeigt ein Beispiel für die Verwendung einer for-Schleife in PHP zur dynamischen Erstellung einer Tabelle. Zuerst wird das Grundgerüst der Tabelle mit den Tags für den Tabellenkörper ausgegeben. Dann wird eine for-Schleife verwendet, die eine Variable „i“ initialisiert, beginnend bei null. Die Schleife läuft so lange, bis „i“ kleiner als zehn ist, und inkrementiert „i“ nach jedem Durchlauf. Innerhalb der Schleife wird für jede Iteration eine Tabellenzeile mit zwei Zellen erstellt. Die erste Zelle enthält den Text „Zeile“, und die zweite Zelle zeigt den aktuellen Wert der Variablen „i“ an. Zum Schluss wird der Tabellenkörper geschlossen. Das Ergebnis ist eine Tabelle mit zehn Zeilen, wobei jede Zeile mit „Zeile“ und der entsprechenden Zahl von null bis neun beschriftet ist. Kommen wir zur for-each-Schleife zur elementweisen Durchlaufung eines Arrays. Zuerst wird ein Array „a“ mit den Werten „A“, „B“, „C“, „D“ und „E“ definiert. In der ersten for-each-Schleife wird das Array „a“ durchlaufen und jedes Element einzeln ausgegeben, gefolgt von einem Leerzeichen. Das Ergebnis dieser Schleife ist die Ausgabe der Elemente „A B C D E“. Nach einem Zeilenumbruch folgt eine zweite for-each-Schleife. In dieser Schleife wird das Array „a“ erneut durchlaufen, wobei sowohl der Schlüssel als auch das Element ausgegeben werden. Das Format der Ausgabe ist „Schlüssel: Element“, getrennt durch Kommata. Das Ergebnis dieser Schleife ist die Ausgabe „null: A, eins: B, zwei: C, drei: D, vier: E“. Nun zur while-Schleife, sehr ähnlich wie in Java. Zuerst werden zwei Variablen definiert: „a“ mit dem Wert zwölf und „b“ mit dem Wert dreiundzwanzig. Die while-Schleife wird so lange ausgeführt, wie der Wert von „a“ kleiner ist als der Wert von „b“. Innerhalb der Schleife wird eine Ausgabe erzeugt, die den aktuellen Wert von „a“ anzeigt und sagt, dass dieser Wert kleiner ist als der Wert von „b“. Nach jeder Ausgabe wird der Wert von „a“ um eins erhöht. Das Ergebnis ist eine Serie von Ausgaben, die zeigen, dass die Werte von zwölf bis zweiundzwanzig jeweils kleiner als dreiundzwanzig sind. Die Ausgaben lauten: Der Wert zwölf ist kleiner als dreiundzwanzig. Der Wert dreizehn ist kleiner als dreiundzwanzig. Und so weiter. Als letzte Schleife die fuß-gesteuerte do-while-Schleife. Hier mal in Kombination mit Zufallszahlen. Zuerst wird ein Array „a“ mit den Werten eins, zwei und drei definiert. Die do-while-Schleife führt zunächst den Codeblock innerhalb der Schleife aus und prüft danach die Bedingung. Innerhalb der Schleife wird eine Zufallszahl zwischen eins und fünf generiert. Diese Zufallszahl wird dann ausgegeben. Der Vorgang wiederholt sich so lange, bis die Zufallszahl nicht mehr im Array „a“ enthalten ist. Das Ergebnis ist eine Serie von Ausgaben, die die Zufallszahlen anzeigen, bis eine Zahl außerhalb des Arrays erzeugt wird. In diesem Fall lautet die Ausgabe beispielsweise: Teste zwei, Teste zwei, Teste zwei, Teste zwei, Teste fünf. Die endgültige Zufallszahl, die nicht im Array enthalten ist, wird abschließend ausgegeben, in diesem Fall fünf. Noch ein Wort zu break und continue. Diesmal wieder mit einer Zufallszahl. Zuerst wird eine Zufallszahl „stop“ zwischen eins und hundert generiert. Dann folgt eine for-Schleife, die bei null beginnt und bis unter hundert läuft. Innerhalb der Schleife wird zunächst überprüft, ob der aktuelle Wert von „i“ eine gerade Zahl ist. Wenn dies der Fall ist, wird der „continue“-Befehl ausgeführt, der die aktuelle Iteration überspringt und zur nächsten fortfährt. Wenn „i“ eine ungerade Zahl ist, wird überprüft, ob „i“ der Zufallszahl „stop“ entspricht. Wenn dies der Fall ist, wird die Schleife mit dem „break“-Befehl beendet. Nach dem Ende der Schleife wird ausgegeben, bei welchem Wert von „i“ die Schleife gestoppt wurde. In dem gezeigten Beispiel lautet die Ausgabe „Bei dreiundneunzig gestoppt.“, was bedeutet, dass die Zufallszahl dreiundneunzig war und die Schleife bei diesem Wert beendet wurde. Dieses Beispiel veranschaulicht, wie „continue“ verwendet wird, um bestimmte Iterationen einer Schleife zu überspringen, und wie „break“ verwendet wird, um eine Schleife basierend auf einer Bedingung zu beenden. Kommen wir nun zu den Funktionen in PHP. Eigene Funktionen werden mit dem Schlüsselwort „function“ definiert. Zum Beispiel kann die Funktion „greet eins“ mit den Parametern „vorname“ und „nachname“ definiert werden. Optionale Parameter sind am Ende der Parameterliste möglich. Beispielsweise kann die Funktion „greet zwei“ einen optionalen Parameter „greeting“ haben, der standardmäßig auf „Hallo“ gesetzt ist. PHP unterstützt in Funktionen standardmäßig den Call-by-Value, was bedeutet, dass eine Kopie des Arguments übergeben wird. Es ist jedoch auch möglich, Call-by-Reference zu verwenden, ähnlich wie in der Programmiersprache C. Dies wird durch ein kaufmännisches Und-Zeichen vor dem Parameter erreicht. Zum Beispiel könnte die Funktion „promotion“ mit einem Parameter per Referenz so definiert werden: function,promotion,klammer-auf,kaufmännisches und,nombre,klammer-zu. Globale Variablen sind nicht automatisch in Funktionen sichtbar. Global bezieht sich hier auf „innerhalb dieser Webseite“. Damit eine globale Variable innerhalb einer Funktion zugänglich ist, muss sie mit dem Schlüsselwort „global“ bekannt gemacht werden. Im ersten Beispiel wird eine Funktion namens „tuwas“ definiert, die versucht, die Variable „a“ auszugeben. Außerhalb der Funktion wird die Variable „a“ auf „Hallo“ gesetzt und dann die Funktion „tuwas“ aufgerufen. Da die Variable „a“ innerhalb der Funktion nicht als global deklariert wurde, erfolgt keine Ausgabe. Im zweiten Beispiel wird die Funktion „tuwas“ erneut definiert, diesmal jedoch wird die Variable „a“ innerhalb der Funktion als global deklariert. Dadurch wird die Variable „a“ auch innerhalb der Funktion sichtbar und die Ausgabe lautet „Hallo“. Im ersten Beispiel wird die Funktion „greet eins“ definiert, die zwei Parameter, „vorname“ und „nachname“, annimmt. Innerhalb der Funktion wird der Text „Hallo vorname nachname“ ausgegeben. Die Funktion gibt den Wert „true“ zurück. Beim Aufruf der Funktion mit den Werten „Frank“ und „Dopatka“ wird der Text „Hallo Frank Dopatka“ ausgegeben. Im zweiten Beispiel wird die Funktion „greet zwei“ definiert, die zwei Parameter, „name“ und „greeting“, annimmt. Der Parameter „greeting“ hat einen Standardwert von „Hallo“. Innerhalb der Funktion wird der Gruß gefolgt von einem Komma und dem Namen ausgegeben. Beim Aufruf der Funktion mit den Werten „Frank“ und „Gruezi“ wird der Text „Gruezi Frank“ ausgegeben. Wird die Funktion nur mit dem Namen „Frank“ aufgerufen, wird der Standardgruß verwendet und der Text „Hallo Frank“ ausgegeben. Die Funktion „promotion“ wird definiert und nimmt einen Parameter „nombre“ per Referenz entgegen. Innerhalb der Funktion wird der Wert des Parameters „nombre“ geändert, indem „Dr. “ vorangestellt wird. Außerhalb der Funktion wird die Variable „name“ auf „Meier“ gesetzt. Dann wird die Funktion „promotion“ mit „name“ als Argument aufgerufen. Da der Parameter per Referenz übergeben wird, ändert sich der Wert von „name“ direkt. Nach dem Funktionsaufruf enthält „name“ den Wert „Doktor Meier“. Abschließend noch Funktionen als Übergabe-Parameter, um diese beispielsweise elementweise für ein Array anzuwenden. Zuerst wird ein Array „data“ erstellt und mit den Werten sechs, sechshundertfünfundsiebzig, sechsundvierzig und zweihundertfünfunddreißig gefüllt. Dann wird die Funktion „addiere“ definiert, die einen Parameter „x“ per Referenz entgegen nimmt. Innerhalb der Funktion wird elf zu dem Wert von „x“ addiert. Die Funktion „array\_walk“ wird verwendet, um die Funktion „addiere“ auf jedes Element des Arrays „data“ anzuwenden. Da die Werte des Arrays per Referenz übergeben werden, ändert die Funktion „addiere“ direkt die Werte des Arrays. Nach der Anwendung von „array\_walk“ enthält das Array „data“ die neuen Werte siebzehn, sechshundertsechsundachtzig, siebenundfünfzig und zweihundertsechsundvierzig, was mit „var\_dump“ ausgegeben wird.